#include<iostream>
#include<cstdlib>
#include<time.h>
#include<stdio.h>
using namespace std;

#define forn(i,n) for(int i=0;i<(n);i++)
#define forkn(i,k,n) for(int i=k;i<=(n);i++)
#define O(o) contador+=(o);
long long int contador=0;

int maxMatch(int* edges, int n){
	if(n>3){
		int primero[n]; //guarda para cada eje el primer eje del matching al que pertenece
		primero[0]=0;
		primero[1]=1;
		primero[2]=0;
		edges[2]+=edges[0]; O(6)
		forkn(i,3,n-2){	//a cada eje lo agrego al matching maximo hasta el momento 
			if(edges[i-2]>edges[i-3]){
				edges[i]+=edges[i-2];		
				primero[i]=primero[i-2];
			}else{
				if(edges[i-3]>edges[i-2]){
					edges[i]+=edges[i-3];
					primero[i]=primero[i-3];
				}
				else{
					if(primero[i-3]!=0) edges[i]+=edges[i-3];
					else edges[i]+=edges[i-2];
					primero[i]=1;
				}
			}
			O(5)
		}
		int n2 = edges[n-3];
		int n3 = edges[n-4];
		if(primero[n-3]==0) n2 -= edges[0]; 
		if(primero[n-4]==0) n3 -= edges[0];
		if(n2>n3) edges[n-1]+=n2; //veo si me conviene sacar el eje que inicia el matching y agregar el que cierra el ciclo
		else edges[n-1]+=n3;
		O(10)
	}
	O(4)
	if(edges[n-1]>edges[n-2] && edges[n-1]>edges[n-3]) return edges[n-1]; //me quedo con el mayor de los matching
	else if(edges[n-2]>edges[n-3]) return edges[n-2];
	else return edges[n-3];
}

int main(int argc, char** argv){
	int n;
	while(cin >> n && n>0){
		int edges[n];
		forn(i,n) cin >> edges[i];
		
		clock_t start,end;
		if(argc>1 && string(argv[1])=="time"){ //si el primer argumento es "time" mido tiempos..
			float secs=argc>2?secs=atof(argv[2]):0.5; //lo ejecuto hasta que tarde al menos secs segundos, para tener presicion (0.5 por default)
			int tries=argc>3?tries=atoi(argv[3]):1; // tomo el tiempo times veces por dato de entrada, para disminuir el error
			forn(tr,tries){
				start = clock(); //guardo el tiempo
				long long int cont=0;
					while((double)(clock()-start)/CLOCKS_PER_SEC<secs){ //evaluo la funcion hasta que tarde al menos secs
						maxMatch(edges,n);
						cont++;
					}
				end = clock(); //guardo el tiempo de finalizacion
				double tiempo=(double)(end-start)/(CLOCKS_PER_SEC*cont);
				//el tiempo total de evaluacion es lo_que_tardo/cantidad_de_veces_que_lo_llamo
				printf("%.8f ",tiempo); //imprimo el resultado con 8 decimales de presicion
			}
			cout << endl;
			
		}else if(argc>1 && string(argv[1])=="count"){ // si el argumento es "count", cuento cantidad de operaciones..
			contador=0;
			maxMatch(edges,n);
			cout << contador << endl; //imprimo la cuenta
			
		}else{
			cout << maxMatch(edges,n) << endl;
		}
	}
	return 0;
}
